package com.itheima.a01myfunction;

import java.util.ArrayList;
import java.util.Collections;

public class FunctionDemo5 {
    public static void main(String[] args) {
        /**
         * 方法引用(类名引用成员方法)
         * 格式
         *  类名::成员方法
         * 需求:
         *  集合里面一些字符串，要求变成大写后进行输出
         */
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "a", "b", "c", "d", "e");

        /**
         * 此类方法引用的特殊规则
         *   1. 被引用方法的形参，需要跟抽象方法的第二个形参到最后一个形参保持一致，返回值需要保持一致
         *   2. 不能引用所有类中的成员方法，只能引用抽像方法第一个参数的类型的方法。
         *
         * 抽像方法形参详解
         *   第一个参数：表示被引用方法的调用者，决定了可以引用哪些类中的方法
         *             在Stream流当中，第一个参数一般都表示流里面的每一个数据
         *             假设流里面的数据是字符串，那么使用这种方式进行方法引用，只能引用String这个类中的方法
         *
         *   第二个参数到最后一个参数：跟被引用方法的形参保持一致，如果没有第二个参数，说明被引用方法需要是无参的成员方法
         */
        // 将流里面的每一个数据，去调用String类中的toUpperCase方法，方法的返回值就是转换之后的结果
        list.stream().map(String::toUpperCase).forEach(s -> System.out.println(s));

    }
}
